import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart'; // 🔥 新增：用于Method Channel
import 'package:get/get.dart';
import '../../../common/routers/index.dart';
import '../../../common/services/index.dart';
import '../../../common/services/service_locator.dart';
import 'index.dart';

/// 闪屏页控制器
/// 
/// 🎯 核心职责：
/// 1. 显示隐私协议弹窗（首次启动）
/// 2. 检查用户登录状态
/// 3. 导航到相应页面（登录页/主页）
class SplashController extends GetxController {
  // 静态常量
  static const String tag = 'SplashController';
  static const int splashDuration = 1; // 闪屏显示时长（秒）
  
  // 状态
  final state = SplashState();
  bool dialogShown = false; // 防止弹窗重复显示
  
  // 服务依赖
  UserService get _userService => Get.find<UserService>();
  AppConfigService get _appConfigService => Get.find<AppConfigService>();
  
  // 构造函数
  SplashController() {
    debugPrint('$tag: Constructor');
  }

  // ==================== 隐私协议弹窗 ====================
  
  /// 显示用户手册和隐私政策弹窗
  void showAgreementDialog() {
    if (dialogShown) {
      debugPrint('$tag: 弹窗已显示，跳过重复显示');
      return; // 防止重复显示
    }
    dialogShown = true;

    debugPrint('$tag: 开始显示协议弹窗');
    debugPrint('$tag: 当前Context状态: ${Get.context != null}');
    debugPrint('$tag: 当前Route状态: ${Get.currentRoute}');

    try {
      // 使用简化的对话框布局，避免复杂的嵌套布局
      Get.dialog(
        AlertDialog(
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(20),
          ),
          backgroundColor: Colors.white,
          elevation: 5,
          titlePadding: const EdgeInsets.only(top: 20, bottom: 0),
          title: const Text(
            '用户手册和隐私政策',
            textAlign: TextAlign.center,
            style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
          ),
          contentPadding: const EdgeInsets.fromLTRB(24, 10, 24, 10),
          content: Container(
            width: double.maxFinite,
            child: RichText(
              textAlign: TextAlign.left,
              text: TextSpan(
                style: const TextStyle(
                  fontSize: 13,
                  color: Colors.black87,
                  height: 1.5,
                ),
                children: [
                  const TextSpan(
                    text:
                        '请您务必仔细阅读完充分理解服务协议和隐私政策各条款，包括但不限于为了向您提供即时通讯、内容等服务，我们需要收集您的设备信息和个人信息。您可阅读',
                  ),
                  WidgetSpan(
                    alignment: PlaceholderAlignment.middle,
                    child: GestureDetector(
                      onTap: showUserManual,
                      child: const Text(
                        '《用户手册》',
                        style: TextStyle(
                          fontSize: 14,
                          color: Colors.pinkAccent,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ),
                  ),
                  const TextSpan(text: '和'),
                  WidgetSpan(
                    alignment: PlaceholderAlignment.middle,
                    child: GestureDetector(
                      onTap: showPrivacyPolicy,
                      child: const Text(
                        '《隐私政策》',
                        style: TextStyle(
                          fontSize: 14,
                          color: Colors.pinkAccent,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ),
                  ),
                  const TextSpan(text: '了解详细信息，如您同意，请点击同意接受我们的服务。'),
                ],
              ),
            ),
          ),
          actionsAlignment: MainAxisAlignment.spaceEvenly,
          actionsPadding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
          buttonPadding: EdgeInsets.zero,
          actions: [
            Container(
              width: 120,
              height: 40,
              child: TextButton(
                onPressed: () {
                  // 直接退出应用
                  exitApp();
                },
                style: TextButton.styleFrom(
                  backgroundColor: Colors.grey.shade200,
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(25),
                  ),
                ),
                child: const Text(
                  '不同意',
                  style: TextStyle(color: Colors.black87, fontSize: 16),
                ),
              ),
            ),
            Container(
              width: 120,
              height: 40,
              child: TextButton(
                onPressed: () async {
                  Get.back(); // 关闭弹窗
                  
                  // 🎯 用户同意隐私协议后的完整流程
                  debugPrint('$tag: 用户同意隐私协议，开始初始化应用...');
                  
                  // 1. 保存隐私协议同意状态
                  await _appConfigService.setPrivacyAgreed(true);
                  debugPrint('$tag: ✅ 隐私协议状态已保存');
                  
                  // 2. 🔥 初始化完整服务（所有业务服务）
                  try {
                    debugPrint('$tag: 开始初始化完整服务...');
                    await ServiceLocator.initFullServices();
                    debugPrint('$tag: ✅ 完整服务初始化成功');
                    
                    // 🔥 初始化高德SDK隐私合规（用户已同意隐私政策）
                    try {
                      debugPrint('$tag: 开始初始化高德SDK隐私合规...');
                      final amapService = Get.find<AmapLocationService>();
                      final success = await amapService.initAmapPrivacy();
                      
                      if (success) {
                        debugPrint('$tag: ✅ 高德SDK隐私合规初始化成功');
                      } else {
                        debugPrint('$tag: ⚠️ 高德SDK隐私合规初始化失败');
                      }
                    } catch (e) {
                      debugPrint('$tag: ❌ 高德SDK隐私合规初始化异常: $e');
                      // 不阻断流程，继续执行
                    }
                    
                    // 🔥 新增：初始化微信SDK隐私合规（用户已同意隐私政策）
                    try {
                      debugPrint('$tag: 开始初始化微信SDK隐私合规...');
                      const channel = MethodChannel('wechat_share');
                      final result = await channel.invokeMethod('initWeChat');
                      
                      if (result == true) {
                        debugPrint('$tag: ✅ 微信SDK隐私合规初始化成功');
                      } else {
                        debugPrint('$tag: ⚠️ 微信SDK隐私合规初始化失败');
                      }
                    } catch (e) {
                      debugPrint('$tag: ❌ 微信SDK隐私合规初始化异常: $e');
                      // 不阻断流程，继续执行
                    }
                    
                    // 打印应用信息（仅在调试模式下）
                    if (kDebugMode) {
                      try {
                        final packageInfoService = Get.find<PackageInfoService>();
                        final appInfo = packageInfoService.getAppInfoSummary();
                        debugPrint('$tag: 📱 应用信息: $appInfo');
                      } catch (e) {
                        debugPrint('$tag: ❌ 获取应用信息失败: $e');
                      }
                    }
                    
                  } catch (e) {
                    debugPrint('$tag: ❌ 完整服务初始化失败: $e');
                    // 即使初始化失败，也继续执行（使用默认配置）
                  }
                  
                  // 3. 检查用户登录状态并导航
                  _checkUserLoginStatus();
                },
                style: TextButton.styleFrom(
                  backgroundColor: Colors.red.shade500,
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(25),
                  ),
                ),
                child: const Text(
                  '同意',
                  style: TextStyle(color: Colors.white, fontSize: 16),
                ),
              ),
            ),
          ],
        ),
        barrierDismissible: false, // 点击外部不能关闭
      );
      debugPrint('$tag: 协议弹窗显示成功');
    } catch (e) {
      debugPrint('$tag: 显示弹窗出错: $e');
      dialogShown = false; // 重置标志，允许重试
    }
  }

  /// 显示用户手册
  void showUserManual() {
    Get.back();
    dialogShown = false; // 重置标志，允许再次显示弹窗

    // 导航到隐私政策页面，传递类型参数
    Get.toNamed(
      RouteNames.myPrivacyPolicy,
      arguments: {'type': 'userManual'},
    )?.then((_) {
      // 返回后重新显示弹窗
      showAgreementDialog();
    });
  }

  /// 显示隐私政策
  void showPrivacyPolicy() {
    Get.back();
    dialogShown = false; // 重置标志，允许再次显示弹窗

    // 导航到隐私政策页面，传递类型参数
    Get.toNamed(
      RouteNames.myPrivacyPolicy,
      arguments: {'type': 'privacyPolicy'},
    )?.then((_) {
      // 返回后重新显示弹窗
      showAgreementDialog();
    });
  }

  /// 强制退出应用
  void exitApp() {
    debugPrint('$tag: 强制退出应用');
    exit(0);
  }

  // ==================== 登录状态检查 ====================

  /// 检查用户登录状态
  void _checkUserLoginStatus() {
    try {
      debugPrint('$tag: 检查用户登录状态: isLoggedIn=${_userService.isLoggedIn}');
      
      if (_userService.isLoggedIn && _userService.currentUserProfile != null) {
        // 用户已登录，显示用户信息并跳转到主页
        debugPrint('$tag: ✅ 用户已登录');
        debugPrint('$tag: 用户ID: ${_userService.currentUserProfile?.userid}');
        debugPrint('$tag: 用户名: ${_userService.currentUserProfile?.username}');
        _navigateToMainPage();
      } else {
        // 用户未登录，跳转到登录页面
        debugPrint('$tag: ❌ 用户未登录，跳转到登录页面');
        _navigateToLoginPage();
      }
    } catch (e) {
      debugPrint('$tag: 检查用户登录状态异常: $e');
      // 出现异常时跳转到登录页面
      _navigateToLoginPage();
    }
  }

  // ==================== 导航方法 ====================

  /// 跳转到主页面
  void _navigateToMainPage() {
    debugPrint('$tag: 导航到主页面');
    try {
      debugPrint('$tag: 准备跳转到主页面: ${RouteNames.systemMain}');
      Get.offAllNamed(RouteNames.systemMain);
      debugPrint('$tag: 主页面跳转命令已执行');
    } catch (e) {
      debugPrint('$tag: 导航到主页面异常: $e');
    }
  }

  /// 跳转到登录页面
  void _navigateToLoginPage() {
    debugPrint('$tag: 导航到登录页面');
    try {
      debugPrint('$tag: 准备跳转到登录页面: ${RouteNames.systemLogin}');
      Get.offAllNamed(RouteNames.systemLogin);
      debugPrint('$tag: 登录页面跳转命令已执行');
    } catch (e) {
      debugPrint('$tag: 导航到登录页面异常: $e');
    }
  }

  // ==================== 生命周期方法 ====================

  @override
  void onInit() {
    super.onInit();
    debugPrint('$tag: onInit');
  }

  @override
  void onReady() {
    super.onReady();
    debugPrint('$tag: onReady');

    // 延迟1秒后检查隐私协议状态
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Future.delayed(Duration(seconds: splashDuration), () async {
        debugPrint('$tag: 闪屏页显示${splashDuration}秒后检查隐私协议状态');
        
        // 检查用户是否已经同意隐私政策
        if (_appConfigService.hasAgreedPrivacy) {
          // 🔥 如果已同意隐私政策，先初始化完整服务
          debugPrint('$tag: 用户已同意隐私政策，开始初始化完整服务...');
          
          try {
            await ServiceLocator.initFullServices();
            debugPrint('$tag: ✅ 完整服务初始化成功');
            
            // 🔥 初始化高德SDK隐私合规
            try {
              debugPrint('$tag: 开始初始化高德SDK隐私合规...');
              final amapService = Get.find<AmapLocationService>();
              final success = await amapService.initAmapPrivacy();
              
              if (success) {
                debugPrint('$tag: ✅ 高德SDK隐私合规初始化成功');
              } else {
                debugPrint('$tag: ⚠️ 高德SDK隐私合规初始化失败');
              }
            } catch (e) {
              debugPrint('$tag: ❌ 高德SDK隐私合规初始化异常: $e');
              // 不阻断流程，继续执行
            }
            
            // 🔥 新增：初始化微信SDK隐私合规
            try {
              debugPrint('$tag: 开始初始化微信SDK隐私合规...');
              const channel = MethodChannel('wechat_share');
              final result = await channel.invokeMethod('initWeChat');
              
              if (result == true) {
                debugPrint('$tag: ✅ 微信SDK隐私合规初始化成功');
              } else {
                debugPrint('$tag: ⚠️ 微信SDK隐私合规初始化失败');
              }
            } catch (e) {
              debugPrint('$tag: ❌ 微信SDK隐私合规初始化异常: $e');
              // 不阻断流程，继续执行
            }
            
            // 打印应用信息（仅在调试模式下）
            if (kDebugMode) {
              try {
                final packageInfoService = Get.find<PackageInfoService>();
                final appInfo = packageInfoService.getAppInfoSummary();
                debugPrint('$tag: 📱 应用信息: $appInfo');
              } catch (e) {
                debugPrint('$tag: ❌ 获取应用信息失败: $e');
              }
            }
            
          } catch (e) {
            debugPrint('$tag: ❌ 完整服务初始化失败: $e');
            // 即使初始化失败，也继续执行（使用默认配置）
          }
          
          // 然后检查用户登录状态
          debugPrint('$tag: 检查登录状态');
          _checkUserLoginStatus();
        } else {
          // 如果未同意，显示协议弹窗
          debugPrint('$tag: 用户未同意隐私政策，显示协议弹窗');
          // 确保在主线程上运行，并增加额外延迟确保UI完全加载
          Future.delayed(const Duration(milliseconds: 500), () {
            if (Get.context != null) {
              debugPrint('$tag: 准备显示协议弹窗...');
              showAgreementDialog();
            } else {
              debugPrint('$tag: Get.context为空，无法显示弹窗');
            }
          });
        }
      });
    });
  }

  @override
  void onClose() {
    debugPrint('$tag: onClose');
    try {
      // 取消所有可能的异步操作和定时器
      dialogShown = false;
      super.onClose();
    } catch (e) {
      debugPrint('$tag: onClose异常: $e');
      super.onClose();
    }
  }
}
